#include <bits/stdc++.h>
using namespace std;
long long f[1005][10005]; // f[i][j]表示i个数k个逆序对的方案数
int main() {
  int n, k;
  cin >> n >> k;
  f[1][0] = 1;                   // 0个逆序对的方案数是1
  for (int i = 2; i <= n; i++) { // 2个以上的数才有逆序对
    f[i][0] = 1;                 // 0个逆序对的方案数是1
    for (int j = 1; j <= k; j++) {
      // 如果把最后一个数放在最后，就有f[i-1][j]个方案符合。
      // 如果把最后一个数不放到最后：
      //--就有f[i][j-1]个方案（即最后一个数往前移动一位）。
      //--还要去掉最后一个数在最前边的方案，即f[i-1][j-i]。
      if (j < i) { // j小于i的情况，最后一个数不能在最前边
        f[i][j] = f[i - 1][j] + f[i][j - 1];
      } else { // j大于等于i的情况，注意减法要+模，避免出负数
        f[i][j] = f[i - 1][j] + f[i][j - 1] - f[i - 1][j - i] + 1000000007;
      }
      f[i][j] %= 1000000007;
    }
  }
  cout << f[n][k] << endl;
  return 0;
}